package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.atguigu.tingshu.vo.album.TrackStatVo;
import com.atguigu.tingshu.vo.order.TrackOrderVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface TrackInfoService extends IService<TrackInfo> {

    /**
     * 保存音频信息
     *
     * @param vo
     */
    void saveTrackInfo(TrackInfoVo vo);

    /**
     * 查询用户的音频信息列表
     *
     * @param pageNum
     * @param pageSize
     * @param trackInfoQuery
     * @return
     */
    IPage<TrackListVo> findUserTrackPage(Integer pageNum, Integer pageSize, TrackInfoQuery trackInfoQuery);

    /**
     * 修改音频信息
     *
     * @param id
     * @param trackInfoVo
     */
    void updateTrackInfo(Long id, TrackInfoVo trackInfoVo);

    /**
     * 删除音频信息及音频文件
     *
     * @param id
     */
    void removeTrackInfo(Long id);

    /**
     * 分页查询专辑中的声音信息
     *
     * @param albumId
     * @param page
     * @return
     */
    IPage<AlbumTrackListVo> findAlbumTrackPage(Long albumId, Page<AlbumTrackListVo> page);

    /**
     * 查询声音统计数据
     *
     * @param trackId
     * @return
     */
    TrackStatVo getTrackStatVo(Long trackId);

    /**
     * 获取声音播放凭证
     *
     * @param trackId
     * @return
     */
    Map<String, Object> getPlayToken(Long trackId);

    /**
     * 查询该专辑中本集声音之后要收费的声音
     *
     * @param trackId
     * @return
     */
    List<TrackOrderVo> findUserTrackPaidList(Long trackId);

    /**
     * 查询用户本次购买的声音列表
     *
     * @param trackId
     * @param count
     * @return
     */
    List<TrackInfo> findUserNeedPaidTracks(Long trackId, Integer count);
}
